package main

import (
	"fmt"
	"io"
	"os"
)

/**
	1 获取命令行参数，源文件与目的文件不能相同
	2 只读方式打开源文件,新建目的(copy)文件
	3 defer 关闭 srcFile & destFile 资源
	4 核心处理,从源文件读取内容,向目的文件中写[创建4K临时缓冲区]
	5 srcFile.Read(dataBuffer) & destFile.Write(dataBuffer[:data])

**/
func main() {
	list := os.Args
	if len(list) != 3 {
		fmt.Println(" usage command exception ! ")
		return
	}

	srcFileName := list[1]
	destFileName := list[2]

	fmt.Printf(" source = %s , dest = %s \n", srcFileName, destFileName)
	if srcFileName == destFileName {
		fmt.Println(" 源文件与拷贝文件不可重名 ！\n ")
		return
	}
	srcFile, srcErr := os.Open(srcFileName)
	if srcErr != nil {
		fmt.Println(" 源文件不存在,打开异常 ! ")
		return
	}
	destFile, destErr := os.Create(destFileName)
	if destErr != nil {
		fmt.Println(" 拷贝文件创建异常! ")
		return
	}
	defer srcFile.Close()
	defer destFile.Close()
	dataBuffer := make([]byte, 4*1024)
	for {
		data, dataErr := srcFile.Read(dataBuffer)
		if dataErr != nil {
			if dataErr == io.EOF {
				break
			}
			fmt.Println(" dataErr = ", dataErr)
		}
		destFile.Write(dataBuffer[:data])
	}

}
